﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Resources;
using MVCScaffold.GerenciadoresContexto;

namespace MVCScaffold.UI
{
    public partial class UserControlArquivoProjeto : UserControl
    {
        public UserControlArquivoProjeto()
        {
            InitializeComponent();
            IniciarForm();
        }

        private void IniciarForm()
        {
            labelStatus.Text = String.Empty;
            labelQuantidadeEntidades.Text = String.Empty;
            labelNamespace.Text = String.Empty;
            labelNomeContext.Text = String.Empty;
        }

        private GerenciadorContexto _gerenciadorContexto;
        private GerenciadorArquivoProjeto _gerenciadorArquivoProjeto;

        public delegate void ArquivoSelecionadoEventHandler(object sender, ArquivoSelecionadoEventArgs e);
        public event ArquivoSelecionadoEventHandler ArquivoSelecionadoEvent;
        protected virtual void OnArquivoSelecionado(ArquivoSelecionadoEventArgs e)
        {
            ArquivoSelecionadoEvent(this, e);
        }


        private void buttonProcurar_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog;

            try
            {
                openFileDialog = new OpenFileDialog();
                openFileDialog.Filter = "Visual C# Project File (*.csproj)|*.csproj";

                if (Directory.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), @"Visual Studio 2008\Projects")))
                    openFileDialog.InitialDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), @"Visual Studio 2008\Projects");

                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    LimparLabels();
                    _gerenciadorArquivoProjeto = new GerenciadorArquivoProjeto(openFileDialog.FileName);
                    if (!String.IsNullOrEmpty(_gerenciadorArquivoProjeto.NomeArquivoEDMX))
                    {
                        textBoxArquivoProjeto.Text = openFileDialog.FileName;
                        _gerenciadorContexto = new GerenciadorEdmx(Path.Combine(_gerenciadorArquivoProjeto.DiretorioProjeto, _gerenciadorArquivoProjeto.NomeArquivoEDMX));

                        labelStatus.Text = Suporte.Mensagens.GetInstance().ResourceManager.GetString("EDMXEncontrado");
                        labelStatus.ForeColor = Color.Green;
                        labelQuantidadeEntidades.Text = String.Format(Suporte.Mensagens.GetInstance().ResourceManager.GetString("LabelQuantidadeEntidades"), _gerenciadorContexto.Entidades.Count);
                        labelNamespace.Text = String.Format(Suporte.Mensagens.GetInstance().ResourceManager.GetString("LabelNamespace"), _gerenciadorContexto.Namespace);
                        labelNomeContext.Text = String.Format(Suporte.Mensagens.GetInstance().ResourceManager.GetString("LabelNomeContext"), _gerenciadorContexto.NomeContext);
                        OnArquivoSelecionado(new ArquivoSelecionadoEventArgs { ArquivoValido = true, GerenciadorArquivoProjeto = _gerenciadorArquivoProjeto, _gerenciadorContexto = _gerenciadorContexto });
                    }
                    else
                    {
                        labelStatus.Text = Suporte.Mensagens.GetInstance().ResourceManager.GetString("EDMXNaoEncontrado");
                        labelStatus.ForeColor = Color.Red;
                        OnArquivoSelecionado(new ArquivoSelecionadoEventArgs() { ArquivoValido = false });
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "ASP.NET MVC Scaffold", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void LimparLabels()
        {
            labelStatus.Text = String.Empty;
            labelStatus.ForeColor = Color.Black;
            labelQuantidadeEntidades.Text = String.Empty; ;
            labelNamespace.Text = String.Empty; ;
            labelNomeContext.Text = String.Empty; ;
        }
    }

    public class ArquivoSelecionadoEventArgs : EventArgs
    {
        public bool ArquivoValido { get; set; }
        public GerenciadorContexto _gerenciadorContexto { get; set; }
        public GerenciadorArquivoProjeto GerenciadorArquivoProjeto { get; set; }
    }
}
